package edu.del.teamknowledgebase.config;

import edu.del.teamknowledgebase.common.interceptor.AuthInterceptor;
import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 全局跨域配置类
 */
@Configuration
@RequiredArgsConstructor
public class WebMvcConfig {

    private final AuthInterceptor authInterceptor;
    @Bean
    public WebMvcConfigurer corsConfig() {
        return new WebMvcConfigurer() {
            /**
             * 配置 CORS 映射规则
             * @param registry CORS 注册器
             */
            @Override
            public void addCorsMappings(@NonNull  CorsRegistry registry) {
                // 对所有接口（路径）都生效
                registry.addMapping("/**")
                    // 允许跨域访问的来源（前端地址）
                    .allowedOrigins("http://localhost:5173", "http://localhost:3000")
                    // 允许的 HTTP 方法
                    .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                    // 允许所有请求头（或者指定如 "Content-Type", "Authorization"）
                    .allowedHeaders("*")
                    // 允许跨域携带 Cookie / JWT Token 等凭证
                    .allowCredentials(true)
                    // 预检请求缓存时间（单位：秒），减少重复 OPTIONS 请求
                    .maxAge(3600);
            }

            @Override
            public void addInterceptors(@NonNull InterceptorRegistry registry) {
                registry.addInterceptor(authInterceptor)
                        // 拦截所有 /api/** 的接口
                        .addPathPatterns("/api/**")
                        .excludePathPatterns(
                            // 排除登录接口
                            "/api/auth/login",
                            // 排除注册接口
                            "/api/auth/register",
                            // 排除发送验证码接口
                            "/api/auth/send-code",
                            // 排除验证验证码接口
                            "/api/auth/verify-code",
                            // 排除重置密码接口
                            "/api/auth/reset-password",
                            // 排除验证码接口
                            "/api/auth/captcha/**"
                        );
            }
        };
    }


}
